package com.ms.qw.jsf.datamodel;

import com.ms.qw.application.mappers.RacionMapper;
import com.ms.qw.client.dto.ProgramacionDTO;
import com.ms.qw.client.dto.ProgramacionFlt;
import com.ms.qw.client.dto.RacionDTO;
import com.ms.qw.client.dto.RacionFlt;
import com.ms.qw.domain.model.ProgramacionRepository;
import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class LazyProgramacionModel extends LazyDataModel<ProgramacionDTO> {

    ProgramacionRepository programacionRepository;
    private ProgramacionFlt programacionFlt;
    private List<ProgramacionDTO> programaciones = new ArrayList<ProgramacionDTO>();



    public LazyProgramacionModel(ProgramacionRepository programacionRepository, ProgramacionFlt programacionFlt) {
        this.programacionRepository = programacionRepository;
        this.programacionFlt = programacionFlt;
    }

    private Integer calcularTamanioTotal() {
        Integer numeroNotificaciones = programacionRepository.total(programacionFlt);
        return numeroNotificaciones < 500 ? numeroNotificaciones:500;
    }

    @Override
    public List<ProgramacionDTO> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,String> filters) {

        Integer totalSize= calcularTamanioTotal();
        int start = first;
        int end = first + pageSize;

        if(end> totalSize){
            end=totalSize;
        }
        programacionFlt.setStart(start);
        programacionFlt.setEnd(end);
        programaciones = programacionRepository.find(programacionFlt);
        setRowCount(totalSize);
        return programaciones;
    }


    @Override
    public ProgramacionDTO getRowData(String rowKey) {
        for(ProgramacionDTO n : programaciones) {
            if(n.getCodigo().equals(Integer.valueOf(rowKey)))
                return n;
        }

        return null;
    }

    @Override
    public Object getRowKey(ProgramacionDTO n) {
        return n.getCodigo();
    }

    @Override
    public void setRowIndex(int rowIndex) {
        if (rowIndex == -1 || getPageSize() == 0) {
            super.setRowIndex(-1);
        } else{

            super.setRowIndex(rowIndex % getPageSize());
        }

    }

}
